﻿using System.Diagnostics;
using System.IO;
using System.Text;
using System.Reflection;
#if !PocketPC
using System.Configuration;
using ErickOrlando.Utilidades.Configuraciones;
using System;
#endif

namespace ErickOrlando.Utilidades.Trazas
{

	/// <summary>
	/// Permite hacer un registro de los eventos que se realicen con la aplicación
	/// </summary>
	public class EventLogTraceListener : TraceListener
	{

		/// <summary>
		/// Permite escribir un mensaje en el Listener
		/// </summary>
		/// <param name="message"></param>
		public override void Write(string message)
		{
			EscribirMensaje(message);
		}

		/// <summary>
		/// Permite escribir un mensaje en el Listener
		/// </summary>
		/// <param name="message"></param>
		public override void WriteLine(string message)
		{
			EscribirMensaje(message);
		}

#if !PocketPC
		private static string GetRuta()
		{
			return EventosEnTexto.Instance.RutaLog;
		}

		private static bool Grabar()
		{
			return EventosEnTexto.Instance.GrabarLog;
		}

#else
		
        private static string GetRuta()
        {
            string ruta = string.Empty;
            if (CslaCE.ConfigurationManager.AppSettings["Ruta"] != null)
                ruta = CslaCE.ConfigurationManager.AppSettings["Ruta"];
            else
                ruta = string.Format(@"{0}\log.txt",
                    Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase));

            return ruta;
        }

        private static bool Grabar()
        {
            bool ruta = false;
            if (CslaCE.ConfigurationManager.AppSettings["Grabar"] != null)
                ruta = CslaCE.ConfigurationManager.AppSettings["Grabar"].Equals("true", 
                    System.StringComparison.CurrentCultureIgnoreCase) ;
            else
                ruta = false;

            return ruta;
        }

#endif


		private void EscribirMensaje(string message)
		{
			if (!Grabar())
				return;

			string ruta = GetRuta();
			if (!String.IsNullOrEmpty(ruta))
				using (var fs = new StreamWriter(ruta, File.Exists(ruta), Encoding.UTF8))
					fs.WriteLine(message);
		}

	}
}
